import nodemailer from "nodemailer";
import { config } from "@config";
import { EmailCode } from "@db";

const { name, host, port, user, password } = config.mail;

const transporter = nodemailer.createTransport({
    host,
    port,
    secure: port === 465 ? true : false,
    auth: {
        user,
        pass: password,
    },
    tls: {
        rejectUnauthorized: false,
    },
    secureConnection: false,
    requireTLS: true,
});

export function getHtmlMail(code: string, link: string) {
    const codeChars = code.split("");
    return `<table cellpadding="0" cellspacing="0" style="background-color:#ffffff;color:#161616;min-width:320px;width:100%">
    <tbody>
    <tr>
        <td>
            <table align="center" cellpadding="0" cellspacing="0" width="520"
                   style="margin:0 auto 0 auto;max-width:520px;width:100% !important">
                <tbody>
                <tr>
                    <td>
                        <table align="left" cellpadding="0" cellspacing="0" width="200"
                               style="width:200px;margin:16px">
                            <tbody>
                            <tr>
                                <td><a href="https://noname.to/" rel="noopener noreferrer" data-link-id="1"
                                       target="_blank"><img
                                        alt="traektorija"
                                        src="https://noname.to/images/logo-dark.png"
                                        width="100%" style="width:100%"> </a></td>
                            </tr>
                            </tbody>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td>
                        <table cellpadding="0" cellspacing="0" width="100%"
                               style="background-color:#f4f4f4;text-align:center;width:100%">
                            <tbody>
                            <tr>
                                <td>
                                    <table align="left" width="420"
                                           style="margin:0 auto 0 auto;text-align:left;">
                                        <tbody>
                                        <tr>
                                            <td style="font:500 28px 'tt norms pro' , 'roboto' , sans-serif;padding: 16px 16px 8px;">
                                                Плотный хай всем нашим!
                                            </td>
                                        </tr>
                                        <tr>
                                            <td style="font:15px 'tt norms pro' , 'roboto' , sans-serif;padding: 8px 16px">
                                                На этот раз наш сотрудник Коля зачем то шепчет вам данные 6 цифр. У нас
                                                нет ни малейшего понятия что бы это могло значить
                                            </td>
                                        </tr>
                                        <tr>
                                            <td style="padding: 16px;">
                                                <table>
                                                    <tbody>
                                                    <tr style="font:500 24px 'tt norms pro' , 'roboto' , sans-serif;">
                                                        <td style="border-radius: 8px; background: #e0e0e0; width: 28px; height: 28px; text-align: center; vertical-align: center" width="24px" height="24px">
                                                            ${codeChars[0]}
                                                        </td>
                                                        <td style="border-radius: 8px; background: #e0e0e0; width: 28px; height: 28px; text-align: center; vertical-align: center" width="24px" height="24px">
                                                            ${codeChars[1]}
                                                        </td>
                                                        <td style="border-radius: 8px; background: #e0e0e0; width: 28px; height: 28px; text-align: center; vertical-align: center" width="24px" height="24px">
                                                            ${codeChars[2]}
                                                        </td>
                                                        <td style="color: #6f6f6f">
                                                            -
                                                        </td>
                                                        <td style="border-radius: 8px; background: #e0e0e0; width: 28px; height: 28px; text-align: center; vertical-align: center" width="24px" height="24px">
                                                            ${codeChars[3]}
                                                        </td>
                                                        <td style="border-radius: 8px; background: #e0e0e0; width: 28px; height: 28px; text-align: center; vertical-align: center" width="24px" height="24px">
                                                            ${codeChars[4]}
                                                        </td>
                                                        <td style="border-radius: 8px; background: #e0e0e0; width: 28px; height: 28px; text-align: center; vertical-align: center" width="24px" height="24px">
                                                            ${codeChars[5]}
                                                        </td>
                                                    </tr>
                                                    </tbody>
                                                </table>
                                            </td>
                                        </tr>
                                        </tbody>
                                    </table>
                                </td>
                            </tr>
                            <tr>
                                <td style="padding: 0 16px 16px;text-align: left">
                                    Или перейдите по ссылке: <a href="${link}" style="color: #525252; text-decoration: none; border-bottom: 1px dotted">${link}</a>
                                </td>
                            </tr>
                            </tbody>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td height="32" style="height:8px">&nbsp;</td>
                </tr>
                <tr>
                    <td width="100%" style="width:100%">
                        <table align="center" cellpadding="0" cellspacing="0" width="100%"
                               style="margin:0 auto 0 auto;width:100%">
                            <tbody>
                            <tr>
                                <td style="color:#525252;font:14px 'tt norms pro' , 'roboto' , sans-serif;text-align:center">
                                    Просматривая данное письмо вы автоматически соглашаетесь на передачу ваших
                                    персональных данных холдингу АО «Ящеры и Евреи в Троянском Коне»
                                </td>
                            </tr>
                            </tbody>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td height="64" style="height:64px">&nbsp;</td>
                </tr>
                </tbody>
            </table>
        </td>
    </tr>
    </tbody>
</table>`;
}

transporter.verify(function (error) {
    if (error) return console.error(error);
    console.log("[SMPT] Connected");
});

export async function sendCode(email: string, type = "student") {
    const { code } = await EmailCode.create({ email });

    const link = `https://${config.host}/${type}/verify/${code}`;

    await transporter.sendMail({
        from: `${name} <${user}>`,
        to: email, // list of receivers
        subject: "Траектория. Подтверждение регистрации.", // Subject line
        text: `Ваш код регистрации - ${code}`, // plain text body
        html: getHtmlMail(code, link), // html body
    });
    return true;
}
